import {
	setToken,
	getToken,
	removeToken,
	setRefreshToken,
	setUuid,
	setHasLogin,
	setUserInfo
} from '@/utils/storage';
import {
	config
} from 'process';

const env = require('./config')
const timeout = 5000

function cleanStorage() {
	uni.showToast({
		title: "你的登录状态已过期，请重新登录",
		icon: "none",
		duration: 1500,
	});
	if (uni.showLoading()) {
		uni.hideLoading();
	}
	setHasLogin(false);
	setToken("");
	setRefreshToken("");
	// console.log("清空token");
	setUuid("");
	setUserInfo({});

	// 防抖处理跳转
	// #ifdef MP-WEIXIN
	// 关闭所有页面返回到登录页
	// uni.showModal({
	// 	content:'是否重新登录',
	// 	success: (res) => {
	// 		if(res.confirm){
	// 			uni.reLaunch({
	// 				url: '/pages/login/login'
	// 			})
	// 		}else{
	// 			uni.showToast({
	// 				icon: 'none',
	// 				title: `取消登录`
	// 			});
	// 		}
	// 	}
	// })
	// #endif
	// #ifndef MP-WEIXIN
	// 关闭所有页面返回到登录页
	// uni.showModal({
	// 	content:'是否重新登录',
	// 	success: (res) => {
	// 		if(res.confirm){
	// 			uni.reLaunch({
	// 				url: '/pages/login/login'
	// 			})
	// 		}else{
	// 			uni.showToast({
	// 				icon: 'none',
	// 				title: `取消登录`
	// 			});
	// 		}
	// 	}
	// })
	//  #endif
}

// 封装api请求
const request = function(option) {
	// 获取uuid
	let uuid = require('@/utils/uuid.modified.js');
	setUuid(uuid.v1())
	// 获取用户传入的url
	// 写入一个link属性作为判断来确定用哪个接口
	if (option.link == 'first') {
		var url = env.baseURL2 + option.url;
	} else {
		var url = env.baseURL + option.url;
	}

	// 判断本地是否存在token，如果存在则带上请求头
	let token = getToken('access_token_key')
	// 添加提请求头
	var header = option.header || {}
	if (!!option.needToken) {
		// 添加token 
		header.Authorization = 'Bearer ' + token;
		header.accessToken = 'Bearer ' + token;
	}
	header.uuid = uuid.v1()

	// 加载提示
	var loading = option.loading;
	// 如果有loading就显示loading
	if (loading) {
		uni.showLoading(loading)
	}

	// 返回一个promise
	return new Promise((resolve, reject) => {
		// 发起一个request请求
		uni.request({
			url, //请求url
			method: option.method || "GET", //请求方法
			header, //请求头
			timeout,
			data: option.data || option.params, //请求数据
			success(res) {
				// console.log('res----------: ', res)
				// 如果请求回来的状态码不是200则执行以下操作
				if (res.data.code !== 200 && res.data.code) {
					// 非成功状态码弹窗
					uni.showToast({
						icon: 'none',
						duration: 3000,
						title: `${res.data.msg}`
					});
					// 登陆失效
					if (res.data.code === 403 || res.data.code === 401) {
						cleanStorage()
						// 清除本地token
						removeToken()
						// 关闭所有页面返回到登录页
						uni.showModal({
							content:'是否授权登录',
							success: (res) => {
								if(res.confirm){
									uni.reLaunch({
										url: '/pages/login/login'
									})
								}else{
									uni.showToast({
										icon: 'none',
										title: `取消登录`
									});
								}
							}
						})
					}
					// 返回错误信息
					reject(res)
				} else {
					// 请求回来的状态码为200则返回内容
					resolve(res.data)
				}

			},
			fail(err) {
				// 失败返回失败结果
				uni.showToast({
					title: '请求失败',
					icon: 'error'
				})
				console.error(err);
				reject(err)
			},
			complete() {
				// 完成 关闭loading
				if (loading) {
					uni.hideLoading()
				}
			}
		})
	})
}


// 定义get简洁方法
request.get = function(url, config) {
	return request({
		url,
		method: "GET",
		...config
	})
}

// 定义post简洁方法
request.post = function(url, data, config) {
	return request({
		url,
		method: "POST",
		...config,
		data
	})
}
// 导出请求
export default request;